/*
 * To  change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bitclub;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *
 * @author JAVA
 */
public class MenuJavier {

    public void menuOfertas() throws ParseException {
        int respuesta;
        boolean bajaPrincipal = false;

        do {
            if (bajaPrincipal) {
                return;
            }
            respuesta = BitUtil.muestraMenu("MENU OFERTAS", new String[]{"Buscar oferta", "Alta oferta"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    menuOfertaBuscar();
                    break;
                case 2:
                    opcionOfertasCrear();
                    break;
            }
        } while (respuesta != 0);
    }

    //menu q te da la opcion de buscar una oferta del  tipo DiaSemana o NumeroArticulo=
    public void menuOfertaBuscar() throws ParseException {
        int respuesta;
        do {
            respuesta = BitUtil.muestraMenu("MENU OFERTA BUSCAR", new String[]{"Oferta Día de la Semana", "Oferta Número de Articulos"});
            switch (respuesta) {
                case 1:
                    List<OfertaDiaSemana> listOf = new ArrayList();
                    OfertaDiaSemana o;
                    listOf = menuOfertaDiaSemana(); //devuelve una lista de ofertasDiaSemana (antigua, actual o futura)

                    if (listOf.isEmpty()) {
                        System.out.println("No hay ofertas de este tipo");
                        break;
                    } else {
                        o = menuOfertaDiaSemanaSelecionada(listOf); //devuelve una oferta elegida de entre la lista
                        if (o != null) {
                            menuOfertaDiaSemanaSelecionadaOpcion(o);    //manda dicha oferta para q se vea, edite o elimine
                        }
                        break;
                    }
                case 2:
                    List<OfertaNumeroArticulo> listOf2 = new ArrayList();
                    OfertaNumeroArticulo o2;
                    listOf2 = menuOfertaNumeroArticulo(); //devuelve una lista de ofertasNumeroArticulo (antogua, acutal, futura)

                    if (listOf2.isEmpty()) {
                        System.out.println("No hay ofertas de este tipo");
                        break;
                    } else {
                        o2 = menuOfertaNumeroArticuloSelecionada(listOf2); //devuelve una oferta concreta de la lista
                        if (o2 != null) {
                            menuOfertaNumeroArticuloSelecionadaOpcion(o2);  //manda ducha oferta para verla, editarla o eliminarla

                        }
                        break;
                    }
            }
        } while (respuesta != 0);
    }

    //menu que te da para elegir entre Oferta Dia Semana (Antigua, actual o futura) y devuelve una lista
    public List<OfertaDiaSemana> menuOfertaDiaSemana() throws ParseException {

        Date fechaBusqueda = new Date();
        List<OfertaDiaSemana> o1 = new ArrayList();
        String busqueda[] = {"Antiguas", "Actuales", "Futuras"};
        int respuesta;
        respuesta = BitUtil.muestraMenu("MENU SELECCIONAR OFERTA DIA SEMANA", busqueda);
        switch (respuesta) {
            case 1:
                o1 = OfertaDiaSemana.seleccionarOferta(fechaBusqueda, "Antiguas");
                break;
            case 2:
                o1 = OfertaDiaSemana.seleccionarOferta(fechaBusqueda, "Actuales");
                break;
            case 3:
                o1 = OfertaDiaSemana.seleccionarOferta(fechaBusqueda, "Futuras");
                break;
            default:
                break;
        }
        return o1;
    }

    //menu que te da para elegir entre las ofertas de numero de articulo si las quiere antiguas, actuales o futuras y devuelve una lista
    public List<OfertaNumeroArticulo> menuOfertaNumeroArticulo() {

        Date fechaBusqueda = new Date();
        List<OfertaNumeroArticulo> o2 = new ArrayList();
        boolean seguirBuscando = true;
        String busqueda[] = {"Antiguas", "Actuales", "Futuras"};
        int respuesta;


        seguirBuscando = true;
        respuesta = BitUtil.muestraMenu("MENU SELECCIONAR OFERTA NUMERO ATICULOS", busqueda);
        switch (respuesta) {
            case 1:
                o2 = OfertaNumeroArticulo.seleccionarOferta(fechaBusqueda, "Antiguas");
                break;
            case 2:
                o2 = OfertaNumeroArticulo.seleccionarOferta(fechaBusqueda, "Actuales");
                break;
            case 3:
                o2 = OfertaNumeroArticulo.seleccionarOferta(fechaBusqueda, "Futuras");
                break;
            default:
                seguirBuscando = false;
                break;
        }

        return o2;
    }

    //menu q te muestra una lista de ofertas dia de la semana  para elegir una
    public OfertaDiaSemana menuOfertaDiaSemanaSelecionada(List<OfertaDiaSemana> o) {
        //edita borra elimina
        DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        int tipo, contador = 0, respuesta = -1;
        OfertaDiaSemana tempOf = null;
        String ofertaDiaSemana[] = new String[o.size()];
        for (OfertaDiaSemana of1 : o) {
            tipo = of1.getTipo();
            if (tipo == 1) {
                ofertaDiaSemana[contador] = of1.getNombre() + " - " + of1.getDescuento() + "% descuento - "
                        + df.format(of1.getFechaInicio()) + " - " + df.format(of1.getFechaFin()) + " - " + of1.getDiaSemana();
            } else if (tipo == 2) {
                ofertaDiaSemana[contador] = of1.getNombre() + " - " + of1.getDiasExtras() + " días extras - "
                        + df.format(of1.getFechaInicio()) + " - " + df.format(of1.getFechaFin()) + " - " + of1.getDiaSemana();
            } else {
                ofertaDiaSemana[contador] = of1.getNombre() + " - " + of1.getPrecioNuevo() + " precio nuevo - "
                        + df.format(of1.getFechaInicio()) + " - " + df.format(of1.getFechaFin()) + " - " + of1.getDiaSemana();
            }
            contador++;
        }
        respuesta = BitUtil.muestraMenu("Elige oferta: ", ofertaDiaSemana);
        if (respuesta != 0) {
            tempOf = o.get((respuesta) - 1);
        }
        return tempOf;
    }

    //menu que te muestras una lista de ofertas numero articulos y te da a elegir una
    public OfertaNumeroArticulo menuOfertaNumeroArticuloSelecionada(List<OfertaNumeroArticulo> o) {
        //edita borra elimina
        DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        int tipo, contador = 0, respuesta = -1;
        OfertaNumeroArticulo tempOf = null;

        String ofertaNumeroArticulo[] = new String[o.size()];
        for (OfertaNumeroArticulo of2 : o) {
            tipo = of2.getTipo();
            if (tipo == 1) {
                ofertaNumeroArticulo[contador] = of2.getNombre() + " - " + of2.getDescuento() + "% descuento - "
                        + of2.getFechaInicio() + " - " + of2.getFechaFin() + " - " + of2.getNumAlquiladas() + ""
                        + " alquiladas - " + of2.getNumPagar() + " a pagar";
            } else if (tipo == 2) {
                ofertaNumeroArticulo[contador] = of2.getNombre() + " - " + of2.getDiasExtras() + " días extras - "
                        + of2.getFechaInicio() + " - " + of2.getFechaFin() + " - " + of2.getNumAlquiladas() + ""
                        + " alquiladas - " + of2.getNumPagar() + " a pagar";
            } else {
                ofertaNumeroArticulo[contador] = of2.getNombre() + " - " + of2.getPrecioNuevo() + " precio nuevo - "
                        + of2.getFechaInicio() + " - " + of2.getFechaFin() + " - " + of2.getNumAlquiladas() + ""
                        + " alquiladas - " + of2.getNumPagar() + " a pagar";
            }
            contador++;
        }
        respuesta = BitUtil.muestraMenu("Elige oferta: ", ofertaNumeroArticulo);
        if (respuesta != 0) {
            tempOf = o.get((respuesta) - 1);
        }
        return tempOf;
    }

    //ver, editar o eliminar la oferta dia de la semana escogida antes
    public void menuOfertaDiaSemanaSelecionadaOpcion(OfertaDiaSemana o) {
        DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        int respuesta, respuesta2;
        boolean seguirEditando = true, confirmacion;
        //como hay tres tipos de ofertasDiaSemana (porcentaje,diaextra,precionuevo) se crean tres String[]
        String parametrosOfertaDiaSemana1[] = {"Porcentaje Descuento: ", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Dia de la semana: "};
        String parametrosOfertaDiaSemana2[] = {"Dias extras: ", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Dia de la semana: "};
        String parametrosOfertaDiaSemana3[] = {"Precio Nuevo", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Dia de la semana: "};

        respuesta = BitUtil.muestraMenu("Elije opcion: ", new String[]{"Ver", "Editar", "Eliminar"});

        if (respuesta != 0) {

            switch (respuesta) {
                case 1: //ver
                    System.out.println("\n" + o.toString());
                    break;
                case 2: //editar
                    do {
                        if (o.getTipo() == 1) {//muestra los campos seleccionables para editar segun el tipo de oferta
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaDiaSemana1);
                        } else if (o.getTipo() == 2) {
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaDiaSemana2);
                        } else {
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaDiaSemana3);
                        }

                        if (respuesta2 != 0) {

                            switch (respuesta2) {
                                case 1:
                                    if (o.getTipo() == 1) {//para editar el campo segun el tipo de oferta
                                        double porcentajeNuevo;
                                        do {
                                            porcentajeNuevo = BitUtil.dameDouble("Introduzca el nuevo porcentaje:  (" + o.getDescuento() + ")\n");
                                        } while (porcentajeNuevo <= 0 || porcentajeNuevo > 100);
                                        o.setDescuento(porcentajeNuevo);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    } else if (o.getTipo() == 2) {
                                        int diasExtras;
                                        do {
                                            diasExtras = BitUtil.dameEntero("Introduzca los nuevos días Extras:  (" + o.getDiasExtras() + ")\n");
                                        } while (diasExtras <= 0);
                                        o.setDiasExtras(diasExtras);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    } else {
                                        double precioNuevo = BitUtil.dameDouble("Introduzca el nuevo precio:  (" + o.getPrecioNuevo() + ")\n");
                                        o.setPrecioNuevo(precioNuevo);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    }
                                case 2://resto de campos a editar
                                    String nombreNuevo = BitUtil.dameCadena("Introduzca el nuevo nombre: (" + o.getNombre() + ")\n");
                                    o.setNombre(nombreNuevo);
                                    seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    break;
                                case 3:
                                    Date fechaInicio;
                                    Date fechaFin;
                                    do {
                                        fechaInicio = BitUtil.dameFecha("Introduzca la nueva fecha inicio: (" + df.format(o.getFechaInicio()) + ")\n");
                                        fechaFin = BitUtil.dameFecha("Introduzca la nueva fecha fin: (" + df.format(o.getFechaFin()) + ")\n");
                                        if (fechaInicio.getTime() > fechaFin.getTime()) {
                                            System.out.println("La fecha de fin es anterior a la de inicio.");
                                        }
                                    } while (fechaInicio.getTime() > fechaFin.getTime());
                                    o.setFechaInicio(fechaInicio);
                                    o.setFechaFin(fechaFin);
                                    seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    break;
                                case 4:
                                    String diaSemana = BitUtil.dameDiaSemana("Introduzca el nuevo día de la semana: (" + o.getDiaSemana() + ")\n");
                                    o.setDiaSemana(diaSemana);
                                    seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    break;
                                default:
                                    System.out.println("Por favor introduzca una de las opciones posibles, gracias");
                                    break;
                            }
                        }
                    } while (seguirEditando == true);

                    System.out.println(o.toString());
                    confirmacion = BitUtil.dameConfirmacion("¿Actualizar oferta? (S/N)");

                    if (confirmacion) {
                        o.actualizar(o); //actualiza la oferta en la BD
                        System.out.println("Oferta actualizada");
                    } else {
                        System.out.println("Oferta NO actualizada");
                    }
                    break;
                case 3://eliminar
                    o.eliminar(o);//llamar metodo de oferta q la elimine de la BD
                    break;
                default:

                    break;
            }
        }
    }

    //ver, editar o eliminar la oferta numero articulo elegida antes
    public void menuOfertaNumeroArticuloSelecionadaOpcion(OfertaNumeroArticulo o) {
        DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        int respuesta, respuesta2;
        boolean seguirEditando = true, confirmacion;
        //como hay cuatro tipo de ofertas numero articulo creamos 4 String[]
        String parametrosOfertaNumeroArticulo1[] = {"Porcentaje Descuento: ", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Numero películas Alquiladas y a Pagar: "};
        String parametrosOfertaNumeroArticulo2[] = {"Dias Extras: ", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Numero películas Alquiladas y a Pagar: "};
        String parametrosOfertaNumeroArticulo3[] = {"Precio Nuevo: ", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Numero películas Alquiladas y a Pagar: "};
        String parametrosOfertaNumeroArticulo4[] = {"Numero películas Alquiladas y a Pagar: ", "Nombre: ", "Fecha Inicio y Fecha Fin: "};


        respuesta = BitUtil.muestraMenu("Elije opcion: ", new String[]{"Ver", "Editar", "Eliminar"});

        if (respuesta != 0) {

            switch (respuesta) {
                case 1://ver
                    System.out.println("\n" + o.toString());
                    break;
                case 2://editar
                    do {
                        if (o.getTipo() == 1) {//muestra campos editables segun oferta
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaNumeroArticulo1);
                        } else if (o.getTipo() == 2) {
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaNumeroArticulo2);
                        } else if (o.getTipo() == 3) {
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaNumeroArticulo3);
                        } else {
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaNumeroArticulo4);
                        }

                        if (respuesta2 != 0) {
                            switch (respuesta2) {
                                case 1:
                                    if (o.getTipo() == 1) {//editar el primer cmapo segun tipo de oferta
                                        double porcentajeNuevo;
                                        do {
                                            porcentajeNuevo = BitUtil.dameDouble("Introduzca el nuevo porcentaje:  (" + o.getDescuento() + ")\n");
                                        } while (porcentajeNuevo <= 0 || porcentajeNuevo > 100);
                                        o.setDescuento(porcentajeNuevo);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    } else if (o.getTipo() == 2) {
                                        int diasExtras;
                                        do {
                                            diasExtras = BitUtil.dameEntero("Introduzca los nuevos días Extras:  (" + o.getDiasExtras() + ")\n");
                                        } while (diasExtras <= 0);
                                        o.setDiasExtras(diasExtras);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    } else if (o.getTipo() == 3) {
                                        double precioNuevo;
                                        do {
                                            precioNuevo = BitUtil.dameDouble("Introduzca el nuevo precio:  (" + o.getPrecioNuevo() + ")\n");
                                        } while (precioNuevo <= 0);
                                        o.setPrecioNuevo(precioNuevo);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    } else {
                                        int numAlquiladas, numPagar;
                                        do {
                                            numAlquiladas = BitUtil.dameEntero("Introduzca el nuevo numero de pelis alquiladas: " + o.getNumAlquiladas() + ")\n");
                                            numPagar = BitUtil.dameEntero("Introduzca el nuevo numero de pelis a pagar: " + o.getNumPagar() + ")\n");
                                            if (numAlquiladas < numPagar) {
                                                System.out.println("Número de peliculas a pagar mayor que alquiladas.");
                                            }
                                        } while (numAlquiladas < numPagar);
                                        o.setNumAlquiladas(numAlquiladas);
                                        o.setNumPagar(numPagar);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    }
                                case 2://resto de camopos
                                    String nombreNuevo = BitUtil.dameCadena("Introduzca el nuevo nombre: (" + o.getNombre() + ")\n");
                                    o.setNombre(nombreNuevo);
                                    seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    break;
                                case 3:
                                    Date fechaInicio;
                                    Date fechaFin;
                                    do {
                                        fechaInicio = BitUtil.dameFecha("Introduzca la nueva fecha inicio: (" + df.format(o.getFechaInicio()) + ")\n");
                                        fechaFin = BitUtil.dameFecha("Introduzca la nueva fecha fin: (" + df.format(o.getFechaFin()) + ")\n");
                                        if (fechaInicio.getTime() > fechaFin.getTime()) {
                                            System.out.println("La fecha de fin es anterior a la de inicio.");
                                        }
                                    } while (fechaInicio.getTime() > fechaFin.getTime());
                                    o.setFechaInicio(fechaInicio);
                                    o.setFechaFin(fechaFin);
                                    seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    break;
                                case 4://en el caso de q sea ofert a tipo 4 este campo no se edita
                                    if (o.getTipo() != 4) {
                                        int numAlquiladas;
                                        int numPagar;
                                        numAlquiladas = BitUtil.dameEntero("Introduzca el nuevo numero de pelis alquiladas: " + o.getNumAlquiladas() + ")\n");
                                        numPagar = numAlquiladas;
                                        o.setNumAlquiladas(numAlquiladas);
                                        o.setNumPagar(numPagar);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    }
                                    break;
                                default:
                                    System.out.println("Por favor introduzca una de las opciones posibles, gracias");
                                    break;
                            }
                        }
                    } while (seguirEditando);

                    System.out.println(o.toString());
                    confirmacion = BitUtil.dameConfirmacion("¿Actualizar oferta? (S/N)");

                    if (confirmacion) {
                        o.actualizar(o);//llamar a metodo q actualice la oferta en la BD
                        System.out.println("Oferta actualizada");

                    } else {
                        System.out.println("Oferta no actualizada");
                    }
                    break;
                case 3://eliminar oferta
                    o.eliminar(o);//llamar metodo de oferta q la elimine de la BD
                    break;
                default:

                    break;
            }
        }
    }

    //menu para crear oferta
    public void opcionOfertasCrear() {

        double descuento = 0, precioNuevo = 0;
        int diasExtras = 0, tipo = 0, numAlquiladas = 0, numPagar = 0;
        Date fechaFin = null, fechaInicio = null;
        String nombre = "", diaSemana = ""; //se inicializa las variables

        OfertaDiaSemana o1;//creamos las ofertas ya q aun no sabes de q  tipo se va a crear
        OfertaNumeroArticulo o2;
        boolean confirmacion; //boleano para confirmar grabar objeto
        boolean terminar; //boleano para en el caso de pulsar 0 se salga

        System.out.println("\n¿Que tipo de Oferta va a crear?");
        String tipoOferta[] = {"Oferta día de la semana", "Oferta por número de artículos"};
        String tipoDescuentoDiaSemana[] = {"Porcentaje", "Días Extras", "Precio Nuevo"};
        String tipoDescuentoNumArticulo[] = {"Porcentaje", "Días Extras", "Precio Nuevo", "3x2"};
        int respuesta, respuesta2;
        respuesta = BitUtil.muestraMenu("CREAR OFERTA", tipoOferta);
        //Menu sobre el tipo de Oferta, si dia de la semana o numero de articulos
        switch (respuesta) {
            case 1:
                terminar = false;
                System.out.println("\n¿Que tipo de descuento va aplicar?");
                respuesta2 = BitUtil.muestraMenu("CREAR OFERTA - DIA DE LA SEMANA", tipoDescuentoDiaSemana);
                //Menu sobre los tres tipo de ofertas q se pueden producir dentro de OFertaDiaSemana
                switch (respuesta2) {

                    case 1:
                        System.out.println("CREAR OFERTA - DIA DE LA SEMANA - PORCENTAJE");
                        do {
                            descuento = BitUtil.dameDouble("Porcentaje: ");
                        } while (descuento <= 0 || descuento > 100);
                        tipo = 1;
                        break;
                    case 2:
                        System.out.println("CREAR OFERTA - DIA DE LA SEMANA - DIAS EXTRAS");
                        do {
                            diasExtras = BitUtil.dameEntero("Número de días Extras: ");
                        } while (diasExtras <= 0);
                        tipo = 2;
                        break;
                    case 3:
                        System.out.println("CREAR OFERTA - DIA DE LA SEMANA - PRECIO NUEVO");
                        do {
                            precioNuevo = BitUtil.dameDouble("Precio Nuevo: ");
                        } while (precioNuevo <= 0);
                        tipo = 3;
                        break;
                    default:
                        terminar = true;
                        break;
                }

                if (!terminar) {

                    nombre = BitUtil.dameCadena("Nombre de Oferta: ");
                    diaSemana = BitUtil.dameDiaSemana("Día de la semana: ");
                    do {
                        fechaInicio = BitUtil.dameFecha("Fecha Inicio: ");
                        fechaFin = BitUtil.dameFecha("Fecha Fin: ");
                        if (fechaInicio.getTime() > fechaFin.getTime()) {
                            System.out.println("La fecha de fin es anterior a la de inicio.");
                        }
                    } while (fechaInicio.getTime() > fechaFin.getTime());

                    o1 = new OfertaDiaSemana(descuento, precioNuevo, diasExtras,
                            tipo, fechaFin, fechaInicio, nombre, 0, diaSemana);

                    System.out.println("\nLa Oferta que se va a crear es: \n");
                    System.out.println(o1.toString());

                    confirmacion = BitUtil.dameConfirmacion("\n¿Desea confirmar? (S/N)");

                    if (confirmacion) {
                        o1.nuevo(o1); //metodo definido en clase Oferta que envia el obejeto a persistencia
                        System.out.println("Oferta creada");
                    } else {
                        System.out.println("Oferta NO creada");
                    }
                }
                break;

            case 2:
                terminar = false;
                System.out.println("\n¿Que tipo de descuento va aplicar?");
                respuesta2 = BitUtil.muestraMenu("CREAR OFERTA - NÚMERO DE ARTÍCULOS", tipoDescuentoNumArticulo);
                //Menu sobre los tres tipo de ofertas q se pueden producir dentro de OfertaNumeroArticulo
                switch (respuesta2) {
                    case 1:
                        System.out.println("CREAR OFERTA - NÚMERO DE ARTÍCULOS - PORCENTAJE");
                        do {
                            descuento = BitUtil.dameDouble("Porcentaje: ");
                        } while (descuento <= 0 || descuento > 100);//controla q se encuentre 1-100
                        tipo = 1;
                        break;
                    case 2:
                        System.out.println("CREAR OFERTA - NÚMERO DE ARTÍCULOS - DIAS EXTRAS");
                        do {
                            diasExtras = BitUtil.dameEntero("Número de días Extras: ");
                        } while (diasExtras <= 0);//controla q diasExtras sea positivo
                        tipo = 2;
                        break;
                    case 3:
                        System.out.println("CREAR OFERTA - NÚMERO DE ARTÍCULOS - PRECIO NUEVO");
                        do {
                            precioNuevo = BitUtil.dameDouble("Precio Nuevo: ");
                        } while (precioNuevo <= 0);//controla q precioNuevo sea positivo
                        tipo = 3;
                        break;
                    case 4:
                        System.out.println("CREAR OFERTA - NÚMERO DE ARTÍCULOS - 3x2");
                        do {
                            numAlquiladas = BitUtil.dameEntero("Número de películas alquiladas: ");
                            numPagar = BitUtil.dameEntero("Número de películas a pagar: ");
                            if (numAlquiladas <= numPagar) {
                                System.out.println("Número de peliculas a pagar mayor que alquiladas.");
                            }
                        } while (numAlquiladas <= numPagar);
                        tipo = 4;
                        break;
                    default:
                        terminar = true;
                        break;
                }
                if (!terminar) {
                    nombre = BitUtil.dameCadena("Nombre de Oferta: ");
                    if (tipo != 4) {

                        numAlquiladas = BitUtil.dameEntero("Número de películas alquiladas: ");
                        numPagar = numAlquiladas;
                    }
                    do {
                        fechaInicio = BitUtil.dameFecha("Fecha Inicio: ");
                        fechaFin = BitUtil.dameFecha("Fecha Fin: ");
                        if (fechaInicio.getTime() > fechaFin.getTime()) {
                            System.out.println("La fecha de fin es anterior a la de inicio.");
                        }
                    } while (fechaInicio.getTime() > fechaFin.getTime());
                    o2 = new OfertaNumeroArticulo(descuento, precioNuevo, diasExtras,
                            tipo, fechaFin, fechaInicio, nombre, 0, numAlquiladas, numPagar);

                    System.out.println("\nLa Oferta que se va a crear es: \n");
                    System.out.println(o2.toString());

                    confirmacion = BitUtil.dameConfirmacion("\n¿Desea confirmar? (S/N)");

                    if (confirmacion) {
                        o2.nuevo(o2); //metodo definido en clase Oferta que envia el obejeto a persistencia
                        System.out.println("Oferta creada");
                    } else {
                        System.out.println("Oferta NO creada");
                    }
                }
                break;
        }
    }
}